{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 使用 OOP 对森林火灾建模"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "%matplotlib inline\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 对森林建模"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "class Forest(object):\n",
    "    def __init__(self, size=(150, 150), p_sapling=0.0025, p_lightning=5.e-6, name=None):\n",
    "        self.size = size\n",
    "        self.trees = np.zeros(self.size, dtype=bool)\n",
    "        self.forest_fires = np.zeros(self.size, dtype=bool)\n",
    "        self.p_sapling = p_sapling\n",
    "        self.p_lightning = p_lightning\n",
    "        if name is not None:\n",
    "            self.name = name\n",
    "        else:\n",
    "            self.name = self.__class__.__name__\n",
    "\n",
    "    @property\n",
    "    def num_cells(self):\n",
    "        return self.size[0] * self.size[1]\n",
    "\n",
    "    @property\n",
    "    def tree_fraction(self):\n",
    "        return self.trees.sum() / float(self.num_cells)\n",
    "\n",
    "    @property\n",
    "    def fire_fraction(self):\n",
    "        return self.forest_fires.sum() / float(self.num_cells)\n",
    "\n",
    "    def advance_one_step(self):\n",
    "        self.grow_trees()\n",
    "        self.start_fires()\n",
    "        self.burn_trees()\n",
    "\n",
    "    def grow_trees(self):\n",
    "        growth_sites = self._rand_bool(self.p_sapling)\n",
    "        self.trees[growth_sites] = True\n",
    "\n",
    "    def start_fires(self):\n",
    "        lightning_strikes = (self._rand_bool(self.p_lightning) & \n",
    "            self.trees)\n",
    "        self.forest_fires[lightning_strikes] = True\n",
    "        \n",
    "    def burn_trees(self):\n",
    "        fires = np.zeros((self.size[0] + 2, self.size[1] + 2), dtype=bool)\n",
    "        fires[1:-1, 1:-1] = self.forest_fires\n",
    "        north = fires[:-2, 1:-1]\n",
    "        south = fires[2:, 1:-1]\n",
    "        east = fires[1:-1, :-2]\n",
    "        west = fires[1:-1, 2:]\n",
    "        new_fires = (north | south | east | west) & self.trees\n",
    "        self.trees[self.forest_fires] = False\n",
    "        self.forest_fires = new_fires\n",
    "\n",
    "    def _rand_bool(self, p):\n",
    "        return np.random.uniform(size=self.trees.shape) < p"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "定义一个森林类之后，我们创建一个新的森林类对象："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "forest = Forest()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "显示当前的状态："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[False False False ..., False False False]\n",
      " [False False False ..., False False False]\n",
      " [False False False ..., False False False]\n",
      " ..., \n",
      " [False False False ..., False False False]\n",
      " [False False False ..., False False False]\n",
      " [False False False ..., False False False]]\n"
     ]
    }
   ],
   "source": [
    "print forest.trees"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[False False False ..., False False False]\n",
      " [False False False ..., False False False]\n",
      " [False False False ..., False False False]\n",
      " ..., \n",
      " [False False False ..., False False False]\n",
      " [False False False ..., False False False]\n",
      " [False False False ..., False False False]]\n"
     ]
    }
   ],
   "source": [
    "print forest.forest_fires"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "使用 `matshow` 进行可视化："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x9f74908>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.matshow(forest.trees, cmap=plt.cm.Greens)\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 模拟森林生长和火灾的过程"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "经过一段时间："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nH+OqGfP4E0uBAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0xa33b940>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "forest.advance_one_step()\n",
    "plt.matshow(forest.trees, cmap=plt.cm.Greens)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "循环很长时间："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.253111111111\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n4HA4APx/JL/m/4qA3IAAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0xa4a7be0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "for i in range(500):\n",
    "    forest.advance_one_step()\n",
    "plt.matshow(forest.trees, cmap=plt.cm.Greens)\n",
    "print forest.tree_fraction"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "迭代更长时间："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0xa4b1b70>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "forest = Forest()\n",
    "tree_fractions = []\n",
    "for i in range(5000):\n",
    "    forest.advance_one_step()\n",
    "    tree_fractions.append(forest.tree_fraction)\n",
    "fig = plt.figure()\n",
    "ax0 = fig.add_subplot(1,2,1)\n",
    "ax0.matshow(forest.trees, cmap=plt.cm.Greens)\n",
    "ax1 = fig.add_subplot(1,2,2)\n",
    "ax1.plot(tree_fractions)\n",
    "\n",
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
